package com.da.javalog.utils;

import com.alibaba.fastjson.JSONObject;

import org.apache.commons.lang3.StringUtils;

/**
 * Json的相关工具类
 */
public class JsonUtils {

    /**
     * 字符编码
     */
    public static final String CHARSET = "UTF-8";

    /**
     * 对象转json字符串
     *
     * @param object
     * @param <T>
     * @return
     */
    public static <T> String serialize(T object) {
        if (object == null) {
            return null;
        }

        return JSONObject.toJSONString(object);
    }

    public static <T> String serializeNoException(T object) {
        try {
            if (object == null) {
                return null;
            }
            return JSONObject.toJSONString(object);
        } catch (Throwable e) {
            return "ERROR_SERIALIZE";
        }
    }

    /**
     * JSON格式字符串转对象
     *
     * @param string
     * @param clz
     * @param <T>
     * @return
     */
    public static <T> T deserialize(String string, Class<T> clz) {
        if (StringUtils.isBlank(string)) {
            return null;
        }

        return JSONObject.parseObject(string, clz);
    }

    /**
     * JSON消息体内容转object
     *
     * @param msgBody
     * @param clazz
     * @param <T>
     * @return
     * @throws Exception
     */
    public static <T> T deserialize(byte[] msgBody, Class<T> clazz) throws Exception {
        if (msgBody == null || msgBody.length == 0) {
            return null;
        }
        String jsonStr = new String(msgBody, CHARSET);
        return JSONObject.parseObject(jsonStr, clazz);
    }

    /*=======================================对象转其他start=====================================*/

    /**
     * object转字符串
     *
     * @param object
     * @return
     */
    public static String toJsonString(Object object) {
        if (object == null) {
            return null;
        }

        return JSONObject.toJSONString(object);
    }

    /**
     * object转消息体，JSON格式
     *
     * @param object
     * @return
     * @throws Exception
     */
    public static byte[] toMsgBody(Object object) throws Exception {
        if (object == null) {
            return null;
        }
        return JSONObject.toJSONString(object).getBytes(CHARSET);
    }
    /*=======================================对象转其他end=======================================*/
}
